package com.whfc.emp.service;

import com.whfc.common.exception.BizException;
import com.whfc.common.result.PageData;
import com.whfc.emp.dto.*;
import com.whfc.emp.param.*;

import java.util.Date;
import java.util.List;

/**
 * @Description 闸机管理
 * @Author hw
 * @Date 2021/1/4 10:31
 * @Version 1.0
 */
public interface AppFaceGateService {

    /**
     * 获取闸机列表
     *
     * @param deptId
     * @param keyword
     * @return
     */
    List<AppFaceGateDTO> list(Integer deptId, String keyword) throws BizException;

    /**
     * 添加闸机
     *
     * @param request
     */
    void add(AppFaceGateAddParam request) throws BizException;

    /**
     * 修改闸机
     *
     * @param request
     */
    void edit(AppFacaGateEditParam request) throws BizException;

    /**
     * 删除闸机
     *
     * @param faceGateId
     */
    void del(Integer faceGateId) throws BizException;

    /**
     * 查看闸机授权人员
     *
     * @param faceGateId
     * @param pageNum
     * @param pageSize
     * @return
     */
    PageData<AppFaceGateEmpDTO> empList(Integer faceGateId, String keyword, Integer groupId, Integer type, Integer workTypeId, Integer pageNum, Integer pageSize) throws BizException;

    /**
     * 查看闸机授权失败人员
     *
     * @param faceGateId
     * @param pageNum
     * @param pageSize
     * @return
     */
    PageData<AppFaceGateEmpDTO> failEmpList(Integer faceGateId, String keyword, Integer workTypeId, Integer pageNum, Integer pageSize) throws BizException;

    /**
     * 获取未授权的人员
     *
     * @param deptId
     * @param faceGateId
     * @param groupId
     * @param keyword
     * @param pageNum
     * @param pageSize
     * @return
     */
    PageData<AppFaceGateEmpDTO> unGrantEmpList(Integer deptId, Integer faceGateId, Integer groupId, String keyword, Integer pageNum, Integer pageSize) throws BizException;

    /**
     * 闸机-添加人员授权
     *
     * @param request
     * @throws BizException
     */
    void faceGateGrantEmp(AppFaceGateGrantEmpParam request) throws BizException;

    /**
     * 闸机人员批量授权
     *
     * @param request
     */
    void faceGateBatchGrantEmpAuth(AppFaceGateGrantEmpParam request) throws BizException;

    /**
     * 闸机-取消人员授权
     *
     * @param request
     * @throws BizException
     */
    void faceGateRevokeEmp(AppFaceGateGrantEmpParam request) throws BizException;

    /**
     * 闸机人员注册
     *
     * @param request
     * @return
     * @throws BizException
     */
    String faceGateGrantEmdAdd(FaceGateGrantEmdAddParam request) throws BizException;

    /**
     * 闸机人员照片注册
     *
     * @param request
     * @return
     * @throws BizException
     */
    String faceGateGrantEmdImgAdd(FaceGateGrantEmdImgAddParam request) throws BizException;

    /**
     * 闸机人员授权
     *
     * @param request
     * @throws BizException
     */
    String faceGateGrantEmdAuth(FaceGateGrantEmdAuthParam request) throws BizException;

    /**
     * 闸机取消人员授权
     *
     * @param deviceKey
     * @param personGuid
     */
    String deviceAuthorizationCancel(String deviceKey, String personGuid) throws BizException;

    /**
     * 同步闸机授权人员
     *
     * @param faceGateId
     */
    void sync(Integer faceGateId) throws BizException;

    /**
     * 根据设备序列号查找闸机
     *
     * @param deviceKey 设备序列号
     * @return 闸机
     */
    AppFaceGateDTO getByDeviceKey(String deviceKey);

    /**
     * 闸机开门
     *
     * @param faceGateId
     */
    void openDoor(Integer faceGateId) throws BizException;

    /**
     * 刷新token
     *
     * @param configId
     */
    void refreshToken(Integer configId);

    /**
     * 查找用户最后一次的刷脸时间
     *
     * @param deviceKey 闸机序列号
     * @param guid      人员GUID
     * @return 刷脸时间
     * @throws BizException
     */
    Date getPersonLastShowTime(String deviceKey, String guid) throws BizException;

    /**
     * 根据闸机序列号和人员GUID查找 闸机人员信息
     *
     * @param deviceKey 闸机序列号
     * @param guid      GUID
     * @return 闸机人员信息
     * @throws BizException 业务异常
     */
    AppFaceGatePersonDTO getByDeviceKeyAndGuid(String deviceKey, String guid) throws BizException;


    /**
     * 获取所有闸机平台
     *
     * @return 闸机平台
     */
    List<AppFaceGatePlatformDTO> getAllFaceGatePlatform() throws BizException;

    /**
     * 根据组织机构获取闸机列表 （配置中心使用  获取闸机详细信息）
     *
     * @param deptId 组织机构ID
     * @return 闸机列表
     */
    List<AppFaceGateConfigDTO> getFaceGateList(Integer deptId) throws BizException;

    /**
     * 设置闸机列表
     *
     * @param deptId 组织机构ID
     * @param list   闸机列表
     */
    void setFaceGateApp(Integer deptId, List<AppFaceGateConfigDTO> list);

    /**
     * 查询可选闸机平台
     *
     * @param deptId
     * @return
     */
    List<AppFaceGateConfigDTO> getFaceGateAppList(Integer deptId) throws BizException;

    /**
     * 查询全部闸机平台
     */
    List<AppFaceGateConfigDTO> getFaceGateAppList() throws BizException;
}
